L'attrito fondamentale nella fisica computazionale sorge perché i computer rappresentano i numeri reali utilizzando matematica in virgola mobile binaria. A differenza del pensiero umano in base-10 (decimale), l'hardware memorizza i valori in base-2 (binaria). Ciò porta a un astrazione imperfetta: frazioni decimali semplici come 0,1 non possono essere rappresentate con precisione.
1. La realtà dei numeri in virgola mobile
Go fornisce due tipi principali per i numeri reali: float32 e float64. Quando si usa la sintassi di dichiarazione abbreviata come price := 0,0, Go prevede di default float64. Questi tipi sono approssimazioni della realtà, non valori matematici esatti.
2. Il mistero dello 0,1
In base-10, $1/3$ produce un decimale infinito ripetuto ($0,333...$). In base-2, il valore $0,1$ produce un frazione infinita ripetuta. Poiché la memoria del computer è finita, questa frazione viene troncata, causando errori cumulativi. Ad esempio, $0,1 + 0,2$ produce $0,30000000000000004$ invece di esattamente $0,3$.
Avvertimento: Non usare mai == per confrontare numeri in virgola mobile nei circuiti logici, poiché queste piccole discrepanze faranno fallire i confronti.